Added template test case to builder test.
authorJuan Pablo Ugarte <juanpablougarte@gmail.com>
Mon, 28 Apr 2014 21:10:39 +0000 (18:10 -0300)
committerJuan Pablo Ugarte <juanpablougarte@gmail.com>
Tue, 29 Apr 2014 15:29:18 +0000 (12:29 -0300)
testsuite/gtk/builder.c

index c6a974f95bff4f0fd81c0ecbfb19861cc8e70930..74da1b3113bb4c35383cdef87d55451f56df59fe 100644 (file)
@@ -2833,6 +2833,77 @@ test_property_bindings (void)
   g_object_unref (builder);
 }
 
+#define MY_GTK_GRID_TEMPLATE "\
+<interface>\n\
+ <template class=\"MyGtkGrid\" parent=\"GtkGrid\">\n\
+   <property name=\"visible\">True</property>\n\
+    <child>\n\
+     <object class=\"GtkLabel\" id=\"label\">\n\
+       <property name=\"visible\">True</property>\n\
+     </object>\n\
+  </child>\n\
+ </template>\n\
+</interface>\n"
+
+#define MY_TYPE_GTK_GRID             (my_gtk_grid_get_type ())
+#define MY_IS_GTK_GRID(obj)          (G_TYPE_CHECK_INSTANCE_TYPE ((obj), MY_TYPE_GTK_GRID))
+
+typedef struct
+{
+  GtkGridClass parent_class;
+} MyGtkGridClass;
+
+typedef struct
+{
+  GtkLabel *label;
+} MyGtkGridPrivate;
+
+typedef struct
+{
+  GtkGrid parent_instance;
+  GtkLabel *label;
+  MyGtkGridPrivate *priv;
+} MyGtkGrid;
+
+G_DEFINE_TYPE_WITH_PRIVATE (MyGtkGrid, my_gtk_grid, GTK_TYPE_GRID);
+
+static void
+my_gtk_grid_init (MyGtkGrid *grid)
+{
+  grid->priv = my_gtk_grid_get_instance_private (grid);
+  gtk_widget_init_template (GTK_WIDGET (grid));
+}
+
+static void
+my_gtk_grid_class_init (MyGtkGridClass *klass)
+{
+  GBytes *template = g_bytes_new_static (MY_GTK_GRID_TEMPLATE, strlen (MY_GTK_GRID_TEMPLATE));
+  GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass);
+
+  gtk_widget_class_set_template (widget_class, template);
+  gtk_widget_class_bind_template_child (widget_class, MyGtkGrid, label);
+  gtk_widget_class_bind_template_child_private (widget_class, MyGtkGrid, label);
+}
+
+static void
+test_template ()
+{
+  MyGtkGrid *my_gtk_grid;
+
+  /* make sure the type we are trying to register does not exist */
+  g_assert (!g_type_from_name ("MyGtkGrid"));
+
+  /* create the template object */
+  my_gtk_grid = g_object_new (MY_TYPE_GTK_GRID, NULL);
+
+  /* Check everything is fine */
+  g_assert (g_type_from_name ("MyGtkGrid"));
+  g_assert (MY_IS_GTK_GRID (my_gtk_grid));
+  g_assert (my_gtk_grid->label == my_gtk_grid->priv->label);
+  g_assert (GTK_IS_LABEL (my_gtk_grid->label));
+  g_assert (GTK_IS_LABEL (my_gtk_grid->priv->label));
+}
+
 int
 main (int argc, char **argv)
 {
@@ -2882,6 +2953,7 @@ main (int argc, char **argv)
   g_test_add_func ("/Builder/GMenu", test_gmenu);
   g_test_add_func ("/Builder/LevelBar", test_level_bar);
   g_test_add_func ("/Builder/Expose Object", test_expose_object);
+  g_test_add_func ("/Builder/Template", test_template);
   g_test_add_func ("/Builder/No IDs", test_no_ids);
   g_test_add_func ("/Builder/Property Bindings", test_property_bindings);